package com.link510.aitools.framework.coder;

import com.google.common.base.Strings;
import com.link510.aitools.core.helper.ByteHelper;
import com.link510.aitools.core.helper.ValidateHelper;
import com.orhanobut.logger.Logger;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToMessageDecoder;
import io.netty.util.CharsetUtil;


import java.nio.charset.Charset;
import java.util.List;

@ChannelHandler.Sharable
public class MessageDecoder extends MessageToMessageDecoder<ByteBuf> {

    private Charset charset = CharsetUtil.ISO_8859_1;

    public MessageDecoder() {
    }

    public MessageDecoder(Charset charset) {
        this.charset = charset;
    }

    @Override
    protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List<Object> out) throws Exception {

        if (msg.readableBytes() > 0) {
            try {

                StringBuilder content;
                String keycharset = ctx.channel().attr(NettyConts.KEY_CHARSET).get();

                if (Strings.isNullOrEmpty(keycharset)) {
                    content = new StringBuilder(msg.toString(charset));
                } else {
                    content = new StringBuilder(msg.toString(Charset.forName(keycharset)));
                }

                content = new StringBuilder(ByteHelper.stringToHexString(content.toString()));

                Logger.i("=====================================================消息解析成功=====================================================");
                Logger.i("====================================================msg:" + content + "====================================================");

                if (!ValidateHelper.getInstance().match(MessageRegex.messageRex, content.toString())) {
                    Logger.e("格式校验失败");
                    return;
                }

                content.delete(0, 8);
                content.delete(content.length() - 4, content.length());

                Logger.i("====================================================msg2:" + content + "====================================================");

                Logger.i(" content : " + content);
                if (Strings.isNullOrEmpty(content.toString())) {
                    msg.resetReaderIndex();
                } else {
                    out.add(content.toString());
                }

            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }

    }
}
